class ABC():
    def abc(self):
        print("abc")

# Herol类就是一个基类，也可以叫父类
class Hreo(ABC):

    jineng_count = 4   # 类属性，英雄这个类，有一个属性是技能数量，4

    def __init__(self, name, hp):
        self.name = name
        self.hp = hp
        self.level = 1
        self.__money = 500

    def func(self):
        print("调用hero类的func方法")

    def run(self):
        print('玩家点击地图位置，【{}】往指定地点移动。。。'.format(self.name))

    @classmethod
    def reboot(cls):  # 类方法
        """英雄重生"""
        print("英雄重生了。。。".format())

    @staticmethod
    def hp_up():   # 静态方法
        """英雄回血"""
        print("英雄受伤后会自动缓慢回血。。。")

    def __add_money(self, money):
        self.__money += money
        print("英雄金币增加：{}".format(money))

    def get_money(self):
        return self.__money

# SheiShou类就是一个派生类，也可以叫子类
class SheiShou(Hreo):

    def func(self):   # 子类中方法与父类重名时，就是在重写父类的方法
        super().abc()
        super().func()  # 调用父类的方法
        super(SheiShou, self).func()  # 调用父类的方法
        Hreo.func(self)  # 通过类名.方法名()的方式调用父类的方法
        print("调用sheshou类的fanc方法")

    def get_name(self):
        return self.name  # 父类定义的实例属性，可以在子类中被直接使用

    def show_jineng(self):
        print(SheiShou.jineng_count)  # 父类定义的类属性，可以在子类中被直接使用

    def show_money(self):
        self.__money = self.get_money()  # 父类定义的私有属性，不可以在子类中被直接使用
        print(self.__money)

    def kill_xxx(self):
        print("英雄击败了小兵。。。")
        self.__add_money(50)   # 父类中定义的私有方法，不可以在子类中被直接使用


# hanbing = SheiShou("寒冰", 1600)  # 子类继承了父类的__init__方法，子类没有重新定义__init__方法的时候，默认使用父类的__init__方法
#                                     # 如果子类重新定义了__init__方法，那子类就是用自己定义的__init__方法
# # print(hanbing.name)  # 子类实例化的对象可以直接使用父类的实例属性
# # print(hanbing.hp)
# # print(hanbing.level)
# # hanbing.run()       # 父类定义的实例方法，子类实例化生成的对象能够直接使用
# # hanbing.reboot()    # 父类中定义的类方法，子类实例化生成的对象能够直接使用
# # hanbing.hp_up()     # 父类中定义的静态方法，子类实例化生成的对象能够直接使用
# # hanbing.__add_money(50)  # 父类定义的私有实例方法，子类实例化生成的对象不能直接使用
# print(hanbing.get_name())
# hanbing.show_jineng()
# hanbing.show_money()
# hanbing.kill_xxx()


hanbing = SheiShou('寒冰', 1600)
hanbing.func()  # 子类调用方法，先找自己，然后再去找父类，再找父类的父类，依次类推
# Hreo.func(hanbing)
print(SheiShou.mro())